home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Scene Storm
/
Scene Storm - Volume 1.iso
/
coding
/
c
/
lha_axeman
/
append.c
next >
Wrap
C/C++ Source or Header
|
1995-09-01
|
2KB
|
96 lines
/***********************************************************
append.c -- append to archive
***********************************************************/
#include "lharc.h"
#include "intrface.h"
#define MAX_INDICATOR_COUNT 64
long indicator_count;
long indicator_threshold;
extern int quiet;
extern int compress_method;
extern long int reading_size;
extern unsigned short dicbit;
struct interfacing interface;
int encode_lzhuf(FILE *infp, FILE *outfp, long size, long *original_size_var, long *packed_size_var, char *name, char *hdr_method)
{
static int method = -1;
if(method < 0)
{
method = compress_method;
if(method > 0) method = encode_alloc(method);
}
interface.method = method;
if(interface.method > 0)
{
interface.infile = infp;
interface.outfile = outfp;
interface.original = size;
start_indicator (name, size, "Freezing",1<<dicbit);
encode(&interface);
*packed_size_var = interface.packed;
*original_size_var = interface.original;
}
else
{
copyfile(infp, outfp, size, 1);
*packed_size_var = *original_size_var = size;
}
bcopy("-lh -", hdr_method, 5);
hdr_method[3] = interface.method + '0';
finish_indicator2 (name, "Frozen", (int)((*packed_size_var * 100L) / *original_size_var ));
return crc;
}
void start_indicator(char *name, long size, char *msg, long def_indicator_threshold)
{
long i;
int m;
if(quiet) return;
m = MAX_INDICATOR_COUNT - strlen (name);
if(m < 0) m = 3; /* (^_^) */
printf ("\r%s\t- %s : ", name, msg);
indicator_threshold = 0;
//((size+(m*def_indicator_threshold-1))(m*def_indicator_threshold)*def_indicator_threshold);
if(indicator_threshold)
{
i = ((size + (indicator_threshold - 1)) / indicator_threshold);
} else {
i = 0;
}
while(i--) putchar('.');
indicator_count = 0;
printf("\r%s\t- %s : ", name, msg);
fflush(stdout);
reading_size = 0L;
}
void finish_indicator2(char *name, char *msg, int pcnt)
{
if(quiet) return;
if(pcnt > 100) pcnt = 100; /* (^_^) */
printf("\r%s\t- %s(%d%%)\n", name, msg, pcnt);
fflush(stdout);
}
void finish_indicator(char *name, char *msg)
{
if(quiet) return;
printf("\r%s\t- %s\n", name, msg);
fflush(stdout);
}